package 树;

import binary_tree.TreeNode;

/**
 *
 * 问：本题和 104. 二叉树的最大深度 的区别是什么？为什么本题代码要更复杂一些？
 *
 * 答：对于非叶节点，把握一个共同原则：如果一个儿子是空节点，另一个儿子不是空节点，那么答案只能来自非空的那一侧。
 *
 * 求最大深度，空节点返回 0，直接计算 max，一定会取到有节点的那一侧（因为深度比 0 大）。
 * 求最小深度，空节点返回 0，直接计算 min，会取到空节点，不符合「答案只能来自非空的那一侧」。所以求最小深度必须多写一些逻辑。
 *
 * 作者：灵茶山艾府
 * 链接：https://leetcode.cn/problems/minimum-depth-of-binary-tree/solutions/2730984/liang-chong-fang-fa-zi-ding-xiang-xia-zi-0sxz/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 * @author macy
 * @date 2025/11/10 16:13
 */
public class MinDepth {

    public static void main(String[] args) {

    }


    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.right == null) {
            return minDepth(root.left) + 1;
        }
        if (root.left == null) {
            return minDepth(root.right) + 1;
        }
        return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
    }


    public int minDepth1(TreeNode root){
        if(root == null){
            return 0;
        }
        if(root.left ==null){
            return minDepth1(root.right) +1;
        }
        if(root.right == null){
            return minDepth1(root.left) +1;
        }
        return Math.min(minDepth1(root.left),minDepth1(root.right))+1;
    }

}
